05 Web开发.01 02 静态资源

您所在的位置:网站首页 webjars springmvc配置 05 Web开发.01 02 静态资源

05 Web开发.01 02 静态资源

2023-03-10 18:41| 来源: 网络整理| 查看: 265

2023-03-05 尚硅谷视频笔记 参照:https://www.yuque.com/atguigu/springboot/vgzmgh#Gcz5z

官网:Spring Boot Features

1、SpringMVC自动配置概览

Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)

The auto-configuration adds the following features on top of Spring’s defaults:

Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.内容协商视图解析器和BeanName视图解析器Support for serving static resources, including support for WebJars (covered later in this document)).静态资源(包括webjars)Automatic registration of Converter, GenericConverter, and Formatter beans.自动注册 Converter,GenericConverter,Formatter Support for HttpMessageConverters (covered later in this document).支持 HttpMessageConverters (后来我们配合内容协商理解原理)Automatic registration of MessageCodesResolver (covered later in this document).自动注册 MessageCodesResolver (国际化用)Static index.html support.静态index.html 页支持Custom Favicon support (covered later in this document).自定义 Favicon Automatic use of a ConfigurableWebBindingInitializer bean (covered later in this document).自动使用 ConfigurableWebBindingInitializer ,(DataBinder负责将请求数据绑定到JavaBean上)If you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc.不用@EnableWebMvc注解。使用 @Configuration + WebMvcConfigurer 自定义规则

If you want to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, and still keep the Spring Boot MVC customizations, you can declare a bean of type WebMvcRegistrations and use it to provide custom instances of those components.声明 WebMvcRegistrations 改变默认底层组件

If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc, or alternatively add your own @Configuration-annotated DelegatingWebMvcConfiguration as described in the Javadoc of @EnableWebMvc.使用 @EnableWebMvc+@Configuration+DelegatingWebMvcConfiguration 全面接管SpringMVC 2、静态资源2.1 静态资源2.1.1 静态资源分析

Spring Boot Features

By default, Spring Boot serves static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath or from the root of the ServletContext.

默认访问路径:/static、/public 、/resources 、/META-INF/resources直接将静态资源放在这几个目录下,访问时:主机:端口/静态资源名。例:locahost:8080/a.jpg

原文: By default, resources are mapped on /** (默认映射/**路径。)

原理: 静态映射/**。请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

2.1.2 访问路径和资源路径改变访问路径:spring: mvc: static-path-pattern: "/resources/**" # 例:此时访问a.jpg的路径如下 # localhost:8080/resources/a.jpg

2. 改变资源文件路径

默认情况下资源时放在上面那几个文件中才可被访问到,我们亦可选择自己的文件夹

spring: resources: static-locations: [classpath:/aaa/] # 此时找静态文件时优先找aaa文件夹下的资源2.1.3 webjar

自动映射 /webjars/**

https://www.webjars.org/

以jquery为例:

org.webjars jquery 3.5.1

访问地址:http://localhost:8080/webjars/jquery/3.5.1/jquery.js 后面地址要按照依赖里面的包路径

2.2、欢迎页支持静态资源路径下 index.html可以配置静态资源路径但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问spring: # mvc: # static-path-pattern: /res/** 这个会导致welcome page功能失效 resources: static-locations: [classpath:/haha/]controller能处理/index2.3、自定义 Favicon

favicon.ico 放在静态资源目录下即可。

spring: # mvc: # static-path-pattern: /res/** 这个会导致 Favicon 功能失效2.4、静态资源配置原理spring默认加载自动配置类:xxxxAutoConfigurationspringMVC的自动配置类是:WebMvcAutoConfiguration@Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration {

说明:

@ Configuration(proxyBeanMethods = false):当前是个配置类,会给容器中添加组件

@ConditionalOnClass:后面的几个类加载后才会加载当前类,后面的类在springmvc包导入时就会自动加载

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class):如果WebMvcConfigurationSupport不存在时就会加载当前类

当前是个配置类,我们可以看看当前给容器添加了哪些东西:

其中有一个内部类:WebMvcAutoConfigurationAdapter

@Configuration(proxyBeanMethods = false) @Import(EnableWebMvcConfiguration.class) @EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class }) @Order(0) public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {

说明:

重点:EnableConfigurationProperties:说明当前配置类中有和配置文件进行了绑定,WebMvcProperties.class, ResourceProperties.class,这两个类中的属性应该就是和application.yaml配置文件进行了绑定:

@ConfigurationProperties(prefix = "spring.mvc") public class WebMvcProperties {

-

@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false) public class ResourceProperties {

果然,可以看到:

WebMvcProperties 和spring.mvc进行了绑定ResourceProperties 和spring.resources进行了绑定2.4.1 有参构造器

向下看这个配置类做了什么,他的构造方法如下:

//有参构造器所有参数的值都会从容器中确定 //ResourceProperties resourceProperties;获取和spring.resources绑定的所有的值的对象 //WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象 //ListableBeanFactory beanFactory Spring的beanFactory //HttpMessageConverters 找到所有的HttpMessageConverters //ResourceHandlerRegistrationCustomizer 找到 资源处理器的自定义器。========= //DispatcherServletPath //ServletRegistrationBean 给应用注册Servlet、Filter.... public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties, ListableBeanFactory beanFactory, ObjectProvider messageConvertersProvider, ObjectProvider resourceHandlerRegistrationCustomizerProvider, ObjectProvider dispatcherServletPath, ObjectProvider


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3